package com.soosync.common;

import java.util.Properties;
import java.util.Enumeration;
import java.io.InputStream;
import java.io.IOException;
//import java.io.File;
//import java.io.OutputStream;
//import java.io.FileOutputStream;

public class PropertyManager {
	private static PropertyManager manager = null; // 本类的唯一实例
	private static Object managerLock = new Object(); // 同步对象
	private static String propFileName = "/system.properties"; // property文件名
	private Properties properties = null; // property对象
	private Object propertiesLock = new Object(); // 同步对象
	private String resourceURI; // 资源URI

	private PropertyManager(String resourceURI) {
		this.resourceURI = resourceURI;
	}

	private static PropertyManager getManager() {
		if (manager == null) {
			synchronized (managerLock) {
				if (manager == null) {
					manager = new PropertyManager(propFileName);
				}
			}
		}
		return manager;
	}

	private String getProp(String name) {
		if (properties == null) { // 检查property文件是否已经被载入
			synchronized (propertiesLock) {
				if (properties == null) {
					loadProps();
				}
			}
		}
		return properties.getProperty(name);
	}

	public static String getProperty(String name) {
		return getManager().getProp(name);
	}

	public static String getProperty(String name, String defaultValue) {
		String v = getManager().getProp(name);
		if (v == null || v.equalsIgnoreCase("")) {
			return defaultValue;
		}
		return v;
	}

	public static Enumeration getPropertyNames() {
		return getManager().getPropNames();
	}

	private Enumeration getPropNames() {
		if (properties == null) { // 检查property文件是否已经被载入
			synchronized (propertiesLock) {
				if (properties == null) {
					loadProps();
				}
			}
		}
		return properties.propertyNames();
	}
	
	private void loadProps() {
		properties = new Properties();
		InputStream in = null;
		try {
			in = getClass().getResourceAsStream(resourceURI);
			properties.load(in);

		} catch (IOException e) {

		} finally {
			try {
				in.close();
			} catch (Exception e) {
			}
		}
	}
//
//	public static boolean propertyFileExists() {
//		return getManager().propFileExists();
//	}
//
//	public static boolean propertyFileIsReadable() {
//		return getManager().propFileIsReadable();
//	}
//
//	public static boolean propertyFileIsWritable() {
//		return getManager().propFileIsWritable();
//	}
//
//	private boolean propFileExists() {
//		String path = getProp("path");
//		if (path == null)
//			return false;
//		File file = new File(path);
//		if (file.isFile()) {
//			return true;
//		} else {
//			return false;
//		}
//	}
//
//	private boolean propFileIsReadable() {
//		try {
//			InputStream in = getClass().getResourceAsStream(resourceURI);
//			return true;
//		} catch (Exception e) {
//			return false;
//		}
//	}
//
//	private boolean propFileIsWritable() {
//		String path = getProp("path");
//		if (path == null)
//			return false;
//		File file = new File(path);
//		if (file.isFile()) {
//			if (file.canWrite()) {
//				return true;
//			} else {
//				return false;
//			}
//		} else {
//			return false;
//		}
//	}
//
//	private void setProp(String name, String value) {
//		synchronized (propertiesLock) {
//			if (properties == null) {
//				loadProps();
//			}
//			properties.put(name, value);
//			String path = properties.getProperty("path").trim();
//			OutputStream out = null;
//			try {
//				out = new FileOutputStream(path);
//				properties.store(out, "system.properties:"
//						+ (new java.util.Date()));
//			} catch (Exception ioe) {
//
//			} finally {
//				try {
//					out.close();
//				} catch (Exception e) {
//				}
//			}
//		}
//	}
//
//	public static void setProperty(String name, String value) {
//		getManager().setProp(name, value);
//	}
}
